package com.demo.until;
import com.itextpdf.text.Document;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.tool.xml.XMLWorkerHelper;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.nio.charset.Charset;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class GeneratePDF {
    /**
     * HTML 转 PDF
     * @param content html内容
     * @param outPath           输出pdf路径
     * @return 是否创建成功
     */
    public static boolean html2Pdf(String content, String outPath) {
        try {
            //Document document = new Document(PageSize.A4.rotate()); //创建一个标准的A4纸文档
            //创建一个标准的A4纸文档
            Document document = new Document();
            //书写器与ducument文档关联
            PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(outPath));
            //打开文档
            document.open();
            XMLWorkerHelper.getInstance().parseXHtml(writer, document,
                    new ByteArrayInputStream(content.getBytes()), null, Charset.forName("UTF-8"));
            //关闭文档
            document.close();
        } catch (Exception e) {
            System.out.println("生成模板内容失败"+e.fillInStackTrace());
            return false;
        }
        return true;
    }
    /**
     * HTML 转 PDF
     * @param content html内容
     * @param outputStream           输出pdf流
     * @return 是否创建成功
     */
    public static boolean html2Pdf(String content, OutputStream outputStream ) {
        try {
            Document document = new Document(); //创建一个标准的A4纸文档
            PdfWriter writer = PdfWriter.getInstance(document, outputStream);//书写器与ducument文档关联
            document.open();//打开文档
            XMLWorkerHelper.getInstance().parseXHtml(writer, document,
                    new ByteArrayInputStream(content.getBytes()), null, Charset.forName("UTF-8"),new CustomXMLWorkerFontProvider());
            document.close();//关闭文档
        } catch (Exception e) {
            System.out.println("生成模板内容失败"+e.fillInStackTrace());
            return false;
        }
        return true;
    }
    /**
     * HTML 转 PDF
     * @param content html内容
     * @param outputStream           输出pdf流
     * @return 是否创建成功
     */
    public static boolean html2Pdf(String content, OutputStream outputStream,int count ) {
        try {
            Document document = new Document(); //创建一个标准的A4纸文档
            PdfWriter writer = PdfWriter.getInstance(document, outputStream);//书写器与ducument文档关联
            document.open();//打开文档

            document.setPageCount(count);

            XMLWorkerHelper.getInstance().parseXHtml(writer, document,
                    new ByteArrayInputStream(content.getBytes()), null, Charset.forName("UTF-8"),new CustomXMLWorkerFontProvider());
            document.close();//关闭文档
        } catch (Exception e) {
            System.out.println("生成模板内容失败"+e.fillInStackTrace());
            return false;
        }
        return true;
    }
    /**
     * HTML 转 PDF
     * @param content html内容
     * @return PDF字节数组
     */
    public static byte[] html2Pdf(String content) {
        ByteArrayOutputStream outputStream = null;
        try {
            Document document = new Document();
            outputStream = new ByteArrayOutputStream();
            PdfWriter writer = PdfWriter.getInstance(document, outputStream);
            document.open();
            XMLWorkerHelper.getInstance().parseXHtml(writer, document,
                    new ByteArrayInputStream(content.getBytes()), null, Charset.forName("UTF-8"));
            document.close();
        } catch (Exception e) {
            System.out.println("------生成pdf失败-------");
        }
        return outputStream.toByteArray();
    }
    public static void main(String[] args) throws Exception {
        Map<String, Object> paramMap = new HashMap<>();
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
       paramMap.put("projectName", "这是一个项目");
        paramMap.put("equipmentName","这是一个很长的设备编号");
        paramMap.put("constructionUnit","今天我就想起个长一点的建设单位名字股份有限公司");
        paramMap.put("useUnit","明天这可能就是一个稍微有点长的使用单位股份有限公司");
        paramMap.put("installationUnit","其实这是一个安装单位的名称虽然有点长");
        paramMap.put("produceUnit","生产厂家可能也不是很短但是也要接着再加一点文字");
        paramMap.put("supervisionUnit","监理单位监理单位监理单位监理单位监理单位");
        paramMap.put("equipmentNum","设备编号还行吧也没那么长虽然现在还是很长");
        paramMap.put("checkConclusion","验收结论应该不会很长");
        paramMap.put("insApproval","同意");
        paramMap.put("installationTechnology","张三");
        paramMap.put("insDate","2023-06-06");
        paramMap.put("leaseApproval","同意");
        paramMap.put("leaseDate","2023-06-06");
        paramMap.put("leaseTechnology","李四");
        paramMap.put("useApproval","同意");
        paramMap.put("useDate","2023-06-06");
        paramMap.put("useTechnology","找老刘");
        paramMap.put("supApproval","同意");
        paramMap.put("supeDate","2023-06-06");
        paramMap.put("supervisionEngineer","123");
        paramMap.put("installationComments","同意");
        paramMap.put("installationTime","年 月 日");
        paramMap.put("usingComments","同意");
        paramMap.put("usingTime","年 月 日");
        paramMap.put("constructionComments","同意");
        paramMap.put("constructionTime","年 月 日");
        paramMap.put("cbComments","同意");
        paramMap.put("cbTime","年 月 日");
        paramMap.put("supervisorComments","同意");
        paramMap.put("supervisorTime","年 月 日");
        paramMap.put("recordComments","同意");
        paramMap.put("recordTime","年 月 日");
        paramMap.put("userEmpetyName","同意");
        paramMap.put("zgdwComments","同意");
        paramMap.put("zgbmEmpetyNameqz","年 月 日");
        paramMap.put("userEmpetyName","同意");
        paramMap.put("userEmpetyNameqz","年 月 日");
       // paramMap.put("uninstallationComments","不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过");
        paramMap.put("unsupervisorComments","不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过");
        paramMap.put("uninsApproval","不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过");
        paramMap.put("unleaseApproval","不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过");
        paramMap.put("unuserEmpetyName","不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过");
        paramMap.put("uninsApproval","不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过不通过");

        Map map=new HashMap();
        map.put("name","张三");
       map.put("workType","1");
       map.put("specialWorkCertificationNo","11111111111");
        Map map1=new HashMap();
        map1.put("name","张三1");
       map1.put("workType","2");
       map1.put("specialWorkCertificationNo","222222222");
        List workList=new ArrayList();
        workList.add(map);
       workList.add(map1);
       paramMap.put("workers",workList);

       paramMap.put("workList",workList);

        int x=workList.size()+1;
        paramMap.put("workerslength",x);
        paramMap.put("worklistlength",x);
       /* paramMap.put("name",' ');
       paramMap.put("idNo",' ');
       paramMap.put("deptName",' ');*/

       System.out.println(workList);

       paramMap.put("deviceName","想一个比较长的设备名称");
       paramMap.put("propertyNo","产权备案编号会不会很长应该会吧但是这也不是很长");
       paramMap.put("deviceSpecification","规格型号应该不会很长的吧");
       paramMap.put("productionDate","年 月 日");
       paramMap.put("acquisitionDate","2023年3月12日");
       paramMap.put("technicalparameters","java springboot springmvc spring oracle mysql redis vue2 vue3 jquery elementUI mybatis mybatiplus 还有什么 我想想 hibernate struts2 tcp5 tcp6  古老的php");
        paramMap.put("effectiveDate","年  月  日");
        paramMap.put("issueDate","年  月  日");
        paramMap.put("constructionTime","年  月  日");
        paramMap.put("usingTime","年  月  日");
        paramMap.put("installationTime","年  月  日");
        paramMap.put("plicenseNo","制造许可证（备案证明）发证机关名字");
        paramMap.put("propertyDept","产权单位");
        paramMap.put("incorporation","想一个很长的企业注册地至于有多长我也不知道");
        paramMap.put("deviceType","设备使用性质");
        paramMap.put("organizationCode","1234567890986753211");
        paramMap.put("representative","张三");
        paramMap.put("registrationNo","12222343543656");
        paramMap.put("issueDate","2023年3月22日");
        paramMap.put("effectiveDate","2025年3月22日");
        paramMap.put("issueDate","2023年3月22日");
        paramMap.put("propertyDept","这是一个很长很长很长很长很长的单位名字");
        String outPath = "E:\\htmltopdf\\demo.pdf";
        String templateDirectory = "E:\\2202\\boot-01-hello\\src\\main\\resources\\XinHtml";
        // String templateContent = GetHtmlContent.getTemplateContent(templateDirectory, "azgz(3).html", paramMap);
        // GeneratePDF.html2Pdf(templateContent, outPath);

    }

}

